When conducting debug operations on hardware or software during a mobile device's development stage, defects in the hardware or software can cause system malfunctions that lead to the failure or halt of a program's execution, also known as a “crash.” Generally, the device's operating system will capture a snapshot of the program's memory in volatile (DRAM) memory, and the program's memory state, and write the snapshot in the form of a “core dump” to nonvolatile storage on the device. In addition to the program's memory, a core dump can also include other system state information such as processor register contents or the state of various hardware components. This information is useful when conducting offline or off site debugging when real time debugging is too expensive, impractical, or time consuming. In that instance, a core dump is a method by which software developers can analyze software failures to determine the cause of the failure, and remedy the issue.
When a running program encounters a fatal error, most operating systems will automatically generate some form of a core dump. For programs running in user memory space, the core dump is limited to the volatile memory associated with that particular program, and such failures generally do not impact overall system stability. However, some failures are of a severity that the entire system is affected. For example, a malfunction in critical operating system components can result in a system wide crash, and an operating system core dump of volatile memory is generated to assist in debugging. However it is possible that the system failure results in a sudden halt of system operations, or is of the type or severity that a core dump cannot be generated. In that instance, if the system were to shut down or restart without creating a core dump, the state of the system would not be preserved for subsequent debugging. Data in volatile memory could be lost if the system loses power or resets, and while data in nonvolatile memory could be preserved, it can remain inaccessible if the system cannot successfully restart.